{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# StackingCVClassifier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "An ensemble-learning meta-classifier for stacking using cross-validation to prepare the inputs for the level-2 classifier to prevent overfitting."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> from mlxtend.classifier import StackingCVClassifier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Overview"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Stacking is an ensemble learning technique to combine multiple classification models via a meta-classifier. The `StackingCVClassifier` extends the standard stacking algorithm (implemented as [`StackingClassifier`](StackingClassifier.md)) using cross-validation to prepare the input data for the level-2 classifier. \n",
    "\n",
    "In the standard stacking procedure, the first-level classifiers are fit to the same training set that is used prepare the inputs for the second-level classifier, which may lead to overfitting. The `StackingCVClassifier`, however, uses the concept of cross-validation: the dataset is split into *k* folds, and in *k* successive rounds, *k-1* folds are used to fit the first level classifier; in each round, the first-level classifiers are then applied to the remaining 1 subset that was not used for model fitting in each iteration. The resulting predictions are then stacked and provided -- as input data -- to the second-level classifier. After the training of the `StackingCVClassifier`, the first-level classifiers are fit to the entire dataset as illustrated in the figure below."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](./StackingCVClassifier_files/stacking_cv_classification_overview.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "More formally, the Stacking Cross-Validation algorithm can be summarized as follows (source: [1]):\n",
    "    \n",
    "![](./StackingCVClassifier_files/stacking_cv_algorithm.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### References\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- [1] Tang, J., S. Alelyani, and H. Liu. \"[Data Classification: Algorithms and Applications.](https://books.google.com/books?id=nwQZCwAAQBAJ&lpg=PA500&dq=stacking%20classifier%20subsets&pg=PA499#v=onepage&q&f=false)\" Data Mining and Knowledge Discovery Series, CRC Press (2015): pp. 498-500.\n",
    "- [2] Wolpert, David H. \"[Stacked generalization.](http://www.sciencedirect.com/science/article/pii/S0893608005800231)\" Neural networks 5.2 (1992): 241-259."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 1 - Simple Stacking CV Classification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn import datasets\n",
    "\n",
    "iris = datasets.load_iris()\n",
    "X, y = iris.data[:, 1:3], iris.target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3-fold cross validation:\n",
      "\n",
      "Accuracy: 0.91 (+/- 0.01) [KNN]\n",
      "Accuracy: 0.90 (+/- 0.03) [Random Forest]\n",
      "Accuracy: 0.92 (+/- 0.03) [Naive Bayes]\n",
      "Accuracy: 0.93 (+/- 0.02) [StackingClassifier]\n"
     ]
    }
   ],
   "source": [
    "from sklearn import model_selection\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.naive_bayes import GaussianNB \n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from mlxtend.classifier import StackingCVClassifier\n",
    "import numpy as np\n",
    "\n",
    "clf1 = KNeighborsClassifier(n_neighbors=1)\n",
    "clf2 = RandomForestClassifier(random_state=42)\n",
    "clf3 = GaussianNB()\n",
    "lr = LogisticRegression()\n",
    "sclf = StackingCVClassifier(classifiers=[clf1, clf2, clf3], \n",
    "                            meta_classifier=lr,\n",
    "                            random_state=42)\n",
    "\n",
    "print('3-fold cross validation:\\n')\n",
    "\n",
    "for clf, label in zip([clf1, clf2, clf3, sclf], \n",
    "                      ['KNN', \n",
    "                       'Random Forest', \n",
    "                       'Naive Bayes',\n",
    "                       'StackingClassifier']):\n",
    "\n",
    "    scores = model_selection.cross_val_score(clf, X, y, \n",
    "                                              cv=3, scoring='accuracy')\n",
    "    print(\"Accuracy: %0.2f (+/- %0.2f) [%s]\" \n",
    "          % (scores.mean(), scores.std(), label))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nSCrpzLIiUg6US5VD2ZRcpWeTckmiZdOT0gR0AN8BfpLfckTyp9xXlHXDysulPgYiaVIuSdko52xS\nLkkxZdxIsdY+DjwOYKLv8hWpEG4YF13qlZfdcAxE0qVckmpQ6vOyckmKTfekiMRww7joUq+87IZj\nICIix5T6vKxckmJTI0UqViWsKFvKWUzccgxERCpJuWeTckmKpeCNlA1PP82GZ5+d8Pi6lStZt3p1\noXcvVUhdwiKSirJJik3ZJJKZgjdS1q1erRO+FJW6hEUkFWWTFJuySSQzGu4lFalSTvaaxUREpHJU\nQjYpl6RYslknpQk4BRidQWWuMWYxcMha25XP4kSqlYYFiKRPuSRSeMolKTZj01jldNwbjFkNPAXE\nvvH71tpLJ7zhkUcy24GIAO6Yj14qwJo1FT8lb8a5BMomkSwolyQv0sylbNZJeRrwZFyQiGREJ3yR\n9CiXRIpDuSTFpJO6iIiIiIi4ihopIiIiIiLiKmqkiIiIiIiIq6iRIiIiIiIirqJGioiIiIiIuIoa\nKSIiIiIi4ipqpIiIiIiIiKuokSIiIiIiIq6iRoqIiIiIiLiKGikiIiIiIuIqaqSIiIiIiIirqJEi\nIiIiIiKuokaKiIiIiIi4ihopIiIiIiLiKmqkiIiIiIiIq6iRIiIiIiIirqJGioiIiIiIuIoaKSIi\nIiIi4ipqpIiIiIiIiKuokSIiIiIiIq6iRoqIiIiIiLhKVo0UY8zVxphdxpghY8wWY8yKfBcmIiKS\nCWWTiEjlyLiRYoz5a+A/gJuBpcBW4GfGmGl5rk1ERCQtyiYRkcqSTU/K54BvWWsfsNa+DlwJDAKX\n5rUyERGR9CmbREQqSEaNFGNMLbAM+MXoY9ZaC/wcOCu/pYmIiKSmbBIRqTyZ9qRMA2qAfTGP7wNm\n5KUiERGRzCibREQqjGb3EhERERERV/Fm+PoDQBiYHvP4dGBvvDds6O9nw4YNEx5ft24d69aty3D3\nIiIiEyibREQqjIkM283gDcZsAZ631q4f+d4Au4G7rLVfi/OWzHYgIiL5ZEpdQDEom0REykZauZRp\nTwrAHcD3jDEvAy8QmVGlEfheFtsSERHJB2WTiEgFybiRYq39fyPzzv8zka70DuA8a21vvosTERFJ\nh7JJRKSyZDzcKwvqUhcRKZ2qGO6VBWWTiEhppJVLmt1LRERERERcpeCNlHizp7iN22tUfblRfblz\n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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10d112f60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from mlxtend.plotting import plot_decision_regions\n",
    "import matplotlib.gridspec as gridspec\n",
    "import itertools\n",
    "\n",
    "gs = gridspec.GridSpec(2, 2)\n",
    "\n",
    "fig = plt.figure(figsize=(10,8))\n",
    "\n",
    "for clf, lab, grd in zip([clf1, clf2, clf3, sclf], \n",
    "                         ['KNN', \n",
    "                          'Random Forest', \n",
    "                          'Naive Bayes',\n",
    "                          'StackingCVClassifier'],\n",
    "                          itertools.product([0, 1], repeat=2)):\n",
    "\n",
    "    clf.fit(X, y)\n",
    "    ax = plt.subplot(gs[grd[0], grd[1]])\n",
    "    fig = plot_decision_regions(X=X, y=y, clf=clf)\n",
    "    plt.title(lab)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 2 - Using Probabilities as Meta-Features"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Alternatively, the class-probabilities of the first-level classifiers can be used to train the meta-classifier (2nd-level classifier) by setting `use_probas=True`. For example, in a 3-class setting with 2 level-1 classifiers, these classifiers may make the following \"probability\" predictions for 1 training sample:\n",
    "\n",
    "- classifier 1: [0.2, 0.5, 0.3]\n",
    "- classifier 2: [0.3, 0.4, 0.4]\n",
    "\n",
    "This results in *k* features, where *k* = [n_classes * n_classifiers], by stacking these level-1 probabilities:\n",
    "\n",
    "- [0.2, 0.5, 0.3, 0.3, 0.4, 0.4]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3-fold cross validation:\n",
      "\n",
      "Accuracy: 0.91 (+/- 0.01) [KNN]\n",
      "Accuracy: 0.91 (+/- 0.06) [Random Forest]\n",
      "Accuracy: 0.92 (+/- 0.03) [Naive Bayes]\n",
      "Accuracy: 0.94 (+/- 0.03) [StackingClassifier]\n"
     ]
    }
   ],
   "source": [
    "clf1 = KNeighborsClassifier(n_neighbors=1)\n",
    "clf2 = RandomForestClassifier(random_state=1)\n",
    "clf3 = GaussianNB()\n",
    "lr = LogisticRegression()\n",
    "sclf = StackingCVClassifier(classifiers=[clf1, clf2, clf3],\n",
    "                            use_probas=True,\n",
    "                            meta_classifier=lr,\n",
    "                            random_state=42)\n",
    "\n",
    "print('3-fold cross validation:\\n')\n",
    "\n",
    "for clf, label in zip([clf1, clf2, clf3, sclf], \n",
    "                      ['KNN', \n",
    "                       'Random Forest', \n",
    "                       'Naive Bayes',\n",
    "                       'StackingClassifier']):\n",
    "\n",
    "    scores = model_selection.cross_val_score(clf, X, y, \n",
    "                                              cv=3, scoring='accuracy')\n",
    "    print(\"Accuracy: %0.2f (+/- %0.2f) [%s]\" \n",
    "          % (scores.mean(), scores.std(), label))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example 3 - Stacked CV Classification and GridSearch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To set up a parameter grid for scikit-learn's `GridSearch`, we simply provide the estimator's names in the parameter grid -- in the special case of the meta-regressor, we append the `'meta-'` prefix."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 10, 'meta-logisticregression__C': 0.1, 'kneighborsclassifier__n_neighbors': 1}\n",
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 50, 'meta-logisticregression__C': 0.1, 'kneighborsclassifier__n_neighbors': 1}\n",
      "0.940 +/- 0.02 {'randomforestclassifier__n_estimators': 10, 'meta-logisticregression__C': 10.0, 'kneighborsclassifier__n_neighbors': 1}\n",
      "0.927 +/- 0.02 {'randomforestclassifier__n_estimators': 50, 'meta-logisticregression__C': 10.0, 'kneighborsclassifier__n_neighbors': 1}\n",
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 10, 'meta-logisticregression__C': 0.1, 'kneighborsclassifier__n_neighbors': 5}\n",
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 50, 'meta-logisticregression__C': 0.1, 'kneighborsclassifier__n_neighbors': 5}\n",
      "0.933 +/- 0.03 {'randomforestclassifier__n_estimators': 10, 'meta-logisticregression__C': 10.0, 'kneighborsclassifier__n_neighbors': 5}\n",
      "0.933 +/- 0.03 {'randomforestclassifier__n_estimators': 50, 'meta-logisticregression__C': 10.0, 'kneighborsclassifier__n_neighbors': 5}\n",
      "Best parameters: {'randomforestclassifier__n_estimators': 10, 'meta-logisticregression__C': 10.0, 'kneighborsclassifier__n_neighbors': 1}\n",
      "Accuracy: 0.94\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.naive_bayes import GaussianNB \n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from mlxtend.classifier import StackingCVClassifier\n",
    "\n",
    "# Initializing models\n",
    "\n",
    "clf1 = KNeighborsClassifier(n_neighbors=1)\n",
    "clf2 = RandomForestClassifier(random_state=42)\n",
    "clf3 = GaussianNB()\n",
    "lr = LogisticRegression()\n",
    "sclf = StackingCVClassifier(classifiers=[clf1, clf2, clf3], \n",
    "                            meta_classifier=lr,\n",
    "                            random_state=42)\n",
    "\n",
    "params = {'kneighborsclassifier__n_neighbors': [1, 5],\n",
    "          'randomforestclassifier__n_estimators': [10, 50],\n",
    "          'meta-logisticregression__C': [0.1, 10.0]}\n",
    "\n",
    "grid = GridSearchCV(estimator=sclf, \n",
    "                    param_grid=params, \n",
    "                    cv=5,\n",
    "                    refit=True)\n",
    "grid.fit(X, y)\n",
    "\n",
    "cv_keys = ('mean_test_score', 'std_test_score', 'params')\n",
    "\n",
    "for r, _ in enumerate(grid.cv_results_['mean_test_score']):\n",
    "    print(\"%0.3f +/- %0.2f %r\"\n",
    "          % (grid.cv_results_[cv_keys[0]][r],\n",
    "             grid.cv_results_[cv_keys[1]][r] / 2.0,\n",
    "             grid.cv_results_[cv_keys[2]][r]))\n",
    "\n",
    "print('Best parameters: %s' % grid.best_params_)\n",
    "print('Accuracy: %.2f' % grid.best_score_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In case we are planning to use a regression algorithm multiple times, all we need to do is to add an additional number suffix in the parameter grid as shown below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 10, 'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 1, 'meta-logisticregression__C': 0.1}\n",
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 50, 'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 1, 'meta-logisticregression__C': 0.1}\n",
      "0.927 +/- 0.03 {'randomforestclassifier__n_estimators': 10, 'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 1, 'meta-logisticregression__C': 10.0}\n",
      "0.933 +/- 0.03 {'randomforestclassifier__n_estimators': 50, 'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 1, 'meta-logisticregression__C': 10.0}\n",
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 10, 'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 5, 'meta-logisticregression__C': 0.1}\n",
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 50, 'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 5, 'meta-logisticregression__C': 0.1}\n",
      "0.927 +/- 0.03 {'randomforestclassifier__n_estimators': 10, 'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 5, 'meta-logisticregression__C': 10.0}\n",
      "0.933 +/- 0.03 {'randomforestclassifier__n_estimators': 50, 'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 5, 'meta-logisticregression__C': 10.0}\n",
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 10, 'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 1, 'meta-logisticregression__C': 0.1}\n",
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 50, 'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 1, 'meta-logisticregression__C': 0.1}\n",
      "0.927 +/- 0.03 {'randomforestclassifier__n_estimators': 10, 'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 1, 'meta-logisticregression__C': 10.0}\n",
      "0.933 +/- 0.03 {'randomforestclassifier__n_estimators': 50, 'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 1, 'meta-logisticregression__C': 10.0}\n",
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 10, 'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 5, 'meta-logisticregression__C': 0.1}\n",
      "0.667 +/- 0.00 {'randomforestclassifier__n_estimators': 50, 'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 5, 'meta-logisticregression__C': 0.1}\n",
      "0.927 +/- 0.02 {'randomforestclassifier__n_estimators': 10, 'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 5, 'meta-logisticregression__C': 10.0}\n",
      "0.933 +/- 0.03 {'randomforestclassifier__n_estimators': 50, 'kneighborsclassifier-1__n_neighbors': 5, 'kneighborsclassifier-2__n_neighbors': 5, 'meta-logisticregression__C': 10.0}\n",
      "Best parameters: {'randomforestclassifier__n_estimators': 50, 'kneighborsclassifier-1__n_neighbors': 1, 'kneighborsclassifier-2__n_neighbors': 1, 'meta-logisticregression__C': 10.0}\n",
      "Accuracy: 0.93\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "# Initializing models\n",
    "\n",
    "clf1 = KNeighborsClassifier(n_neighbors=1)\n",
    "clf2 = RandomForestClassifier(random_state=1)\n",
    "clf3 = GaussianNB()\n",
    "lr = LogisticRegression()\n",
    "sclf = StackingCVClassifier(classifiers=[clf1, clf1, clf2, clf3], \n",
    "                            meta_classifier=lr,\n",
    "                            random_state=42)\n",
    "\n",
    "params = {'kneighborsclassifier-1__n_neighbors': [1, 5],\n",
    "          'kneighborsclassifier-2__n_neighbors': [1, 5],\n",
    "          'randomforestclassifier__n_estimators': [10, 50],\n",
    "          'meta-logisticregression__C': [0.1, 10.0]}\n",
    "\n",
    "grid = GridSearchCV(estimator=sclf, \n",
    "                    param_grid=params, \n",
    "                    cv=5,\n",
    "                    refit=True)\n",
    "grid.fit(X, y)\n",
    "\n",
    "cv_keys = ('mean_test_score', 'std_test_score', 'params')\n",
    "\n",
    "for r, _ in enumerate(grid.cv_results_['mean_test_score']):\n",
    "    print(\"%0.3f +/- %0.2f %r\"\n",
    "          % (grid.cv_results_[cv_keys[0]][r],\n",
    "             grid.cv_results_[cv_keys[1]][r] / 2.0,\n",
    "             grid.cv_results_[cv_keys[2]][r]))\n",
    "\n",
    "print('Best parameters: %s' % grid.best_params_)\n",
    "print('Accuracy: %.2f' % grid.best_score_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# API"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "## StackingCVClassifier\n",
      "\n",
      "*StackingCVClassifier(classifiers, meta_classifier, use_probas=False, n_folds=2, use_features_in_secondary=False, stratify=True, random_state=None, shuffle=True, verbose=0)*\n",
      "\n",
      "A 'Stacking Cross-Validation' classifier for scikit-learn estimators.\n",
      "\n",
      "New in mlxtend v0.4.3\n",
      "\n",
      "**Parameters**\n",
      "\n",
      "- `classifiers` : array-like, shape = [n_classifiers]\n",
      "\n",
      "    A list of classifiers.\n",
      "    Invoking the `fit` method on the `StackingClassifer` will fit clones\n",
      "    of these original classifiers that will\n",
      "    be stored in the class attribute\n",
      "    `self.clfs_`.\n",
      "\n",
      "- `meta_classifier` : object\n",
      "\n",
      "    The meta-classifier to be fitted on the ensemble of\n",
      "    classifiers\n",
      "\n",
      "- `use_probas` : bool (default: False)\n",
      "\n",
      "    If True, trains meta-classifier based on predicted probabilities\n",
      "    instead of class labels.\n",
      "\n",
      "- `n_folds` : int (default=2)\n",
      "\n",
      "    The number of folds used for while creating training data for the\n",
      "    meta-classifier during fitting.\n",
      "\n",
      "- `use_features_in_secondary` : bool (default: False)\n",
      "\n",
      "    If True, the meta-classifier will be trained both on the predictions\n",
      "    of the original classifiers and the original dataset.\n",
      "    If False, the meta-classifier will be trained only on the predictions\n",
      "    of the original classifiers.\n",
      "\n",
      "- `stratify` : bool (default: True)\n",
      "\n",
      "    If True, the cross-validation technique used for fitting the classifier\n",
      "    will be Stratified K-Fold.\n",
      "    If False, the cross-validation technique used will be Regular K-Fold.\n",
      "    It is highly recommended to use Stratified K-Fold.\n",
      "\n",
      "- `shuffle` : bool (default: True)\n",
      "\n",
      "    If True, when fitting, the training data will be shuffled prior to\n",
      "    cross-validation.\n",
      "    random_state: None, int, or RandomState\n",
      "    When shuffle=True, pseudo-random number generator state used for\n",
      "    shuffling. If None, use default numpy RNG for shuffling.\n",
      "\n",
      "- `verbose` : int, optional (default=0)\n",
      "\n",
      "    Controls the verbosity of the building process.\n",
      "    - `verbose=0` (default): Prints nothing\n",
      "    - `verbose=1`: Prints the number & name of the regressor being fitted\n",
      "    and which fold is currently being used for fitting\n",
      "    - `verbose=2`: Prints info about the parameters of the\n",
      "    regressor being fitted\n",
      "    - `verbose>2`: Changes `verbose` param of the underlying regressor to\n",
      "    self.verbose - 2\n",
      "\n",
      "**Attributes**\n",
      "\n",
      "- `clfs_` : list, shape=[n_classifiers]\n",
      "\n",
      "    Fitted classifiers (clones of the original classifiers)\n",
      "\n",
      "- `meta_clf_` : estimator\n",
      "\n",
      "    Fitted meta-classifier (clone of the original meta-estimator)\n",
      "\n",
      "### Methods\n",
      "\n",
      "<hr>\n",
      "\n",
      "*fit(X, y)*\n",
      "\n",
      "Fit ensemble classifers and the meta-classifier.\n",
      "\n",
      "**Parameters**\n",
      "\n",
      "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n",
      "\n",
      "    Training vectors, where n_samples is the number of samples and\n",
      "    n_features is the number of features.\n",
      "\n",
      "- `y` : array-like, shape = [n_samples]\n",
      "\n",
      "    Target values.\n",
      "\n",
      "**Returns**\n",
      "\n",
      "- `self` : object\n",
      "\n",
      "\n",
      "<hr>\n",
      "\n",
      "*fit_transform(X, y=None, **fit_params)*\n",
      "\n",
      "Fit to data, then transform it.\n",
      "\n",
      "Fits transformer to X and y with optional parameters fit_params\n",
      "and returns a transformed version of X.\n",
      "\n",
      "**Parameters**\n",
      "\n",
      "- `X` : numpy array of shape [n_samples, n_features]\n",
      "\n",
      "    Training set.\n",
      "\n",
      "\n",
      "- `y` : numpy array of shape [n_samples]\n",
      "\n",
      "    Target values.\n",
      "\n",
      "**Returns**\n",
      "\n",
      "- `X_new` : numpy array of shape [n_samples, n_features_new]\n",
      "\n",
      "    Transformed array.\n",
      "\n",
      "<hr>\n",
      "\n",
      "*get_params(deep=True)*\n",
      "\n",
      "Return estimator parameter names for GridSearch support.\n",
      "\n",
      "<hr>\n",
      "\n",
      "*predict(X)*\n",
      "\n",
      "Predict target values for X.\n",
      "\n",
      "**Parameters**\n",
      "\n",
      "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n",
      "\n",
      "    Training vectors, where n_samples is the number of samples and\n",
      "    n_features is the number of features.\n",
      "\n",
      "**Returns**\n",
      "\n",
      "- `labels` : array-like, shape = [n_samples]\n",
      "\n",
      "    Predicted class labels.\n",
      "\n",
      "<hr>\n",
      "\n",
      "*predict_proba(X)*\n",
      "\n",
      "Predict class probabilities for X.\n",
      "\n",
      "**Parameters**\n",
      "\n",
      "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n",
      "\n",
      "    Training vectors, where n_samples is the number of samples and\n",
      "    n_features is the number of features.\n",
      "\n",
      "**Returns**\n",
      "\n",
      "- `proba` : array-like, shape = [n_samples, n_classes]\n",
      "\n",
      "    Probability for each class per sample.\n",
      "\n",
      "<hr>\n",
      "\n",
      "*score(X, y, sample_weight=None)*\n",
      "\n",
      "Returns the mean accuracy on the given test data and labels.\n",
      "\n",
      "In multi-label classification, this is the subset accuracy\n",
      "which is a harsh metric since you require for each sample that\n",
      "each label set be correctly predicted.\n",
      "\n",
      "**Parameters**\n",
      "\n",
      "- `X` : array-like, shape = (n_samples, n_features)\n",
      "\n",
      "    Test samples.\n",
      "\n",
      "\n",
      "- `y` : array-like, shape = (n_samples) or (n_samples, n_outputs)\n",
      "\n",
      "    True labels for X.\n",
      "\n",
      "\n",
      "- `sample_weight` : array-like, shape = [n_samples], optional\n",
      "\n",
      "    Sample weights.\n",
      "\n",
      "**Returns**\n",
      "\n",
      "- `score` : float\n",
      "\n",
      "    Mean accuracy of self.predict(X) wrt. y.\n",
      "\n",
      "<hr>\n",
      "\n",
      "*set_params(**params)*\n",
      "\n",
      "Set the parameters of this estimator.\n",
      "\n",
      "The method works on simple estimators as well as on nested objects\n",
      "(such as pipelines). The latter have parameters of the form\n",
      "``<component>__<parameter>`` so that it's possible to update each\n",
      "component of a nested object.\n",
      "\n",
      "**Returns**\n",
      "\n",
      "self\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "with open('../../api_modules/mlxtend.classifier/StackingCVClassifier.md', 'r') as f:\n",
    "    print(f.read())"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
